import pymysql,time,random
import requests,time

prefix='psk_' #表前缀

#数据库连接信息
def connect_db(dbhost='数据库地址',dbusername='数据库用户名',dbuserpwd='密码',dbname='数据表'):
    return pymysql.connect(dbhost,dbusername,dbuserpwd,dbname)



#更新任务信息
def update_queue(id,ip,time):
    global prefix
    db = connect_db()
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()

    sql = "UPDATE  %squeue SET status = '1',actual_time= '%d',ip='%s' WHERE id = '%d'"%(prefix,time,str(ip),int(id))
    try:
        # 执行sql语句
        cursor.execute(sql)
        # 提交到数据库执行
        db.commit()
    except Exception:
        # 如果发生错误则回滚
        db.rollback()
    #关闭数据库
    db.close()



#抓取ip存入数据库
def get_ip():
    resp = requests.get('http://http.tiqu.alicdns.com/getip3?num=10&type=2&pro=0&city=0&yys=0&port=1&time=1&ts=1&ys=0&cs=0&lb=1&sb=0&pb=4&mr=2&regions=')
    proxies = resp.json()
    if proxies['code'] == 0:
        for proxy in proxies['data']:
            timeArray = time.strptime(proxy['expire_time'], "%Y-%m-%d %H:%M:%S")
            times_data = int(time.mktime(timeArray))
            times_time = int(time.time())+300
            if(times_time<times_data):
                insert_ip(proxy['ip'], proxy['port'])  # ip,端口
    return proxies['code']

    '''
    #蘑菇代理api
    resp = requests.get('http://piping.mogumiao.com/proxy/api/get_ip_bs?appKey=360be1e1c52e456b94ba97b8af41af39&count=10&expiryDate=0&format=1&newLine=2')
    proxies=resp.json()
    if proxies['code']=='0':
        for proxy in proxies['msg']:
            insert_ip(proxy['ip'], proxy['port'])  # ip,端口

    return proxies['code']
    '''





#获取ip
def get_db_ip():
    global prefix
    db = connect_db()
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()
    sql = "SELECT count(id) as counts FROM %sippool WHERE 1 "%prefix
    try:
        # 执行sql语句
        cursor.execute(sql)
        data_count = cursor.fetchone()

    except Exception:
        # 如果发生错误则回滚
        db.rollback()
    if data_count[0]<5:
        ip_status=get_ip()
        if ip_status==0:
            return get_db_ip()
        else:
            return None

    limit=random.randrange(data_count[0]);
    if limit == data_count[0]:
        limit=(limit-1)

    sql = "SELECT * FROM %sippool LIMIT %d,1" %(prefix,limit)
    try:
        # 执行sql语句
        cursor.execute(sql)
        results = cursor.fetchone()
    except Exception:
        # 如果发生错误则回滚
        db.rollback()

    # 关闭数据库
    db.close()

    return results




#写入ip
def insert_ip(ip,port):
    global prefix
    db = connect_db()
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()

    sql = "SELECT * FROM %sippool WHERE ip='%s' and port='%s'" % (prefix,ip,port)
    try:
        # 执行sql语句
        cursor.execute(sql)
        results = cursor.fetchone()
    except Exception:
        # 如果发生错误则回滚
        db.rollback()


    if  results:
        sql = "UPDATE  %sippool SET ip = '%s',port= '%s',add_time='%d' WHERE id = '%d'"%(prefix,str(ip),str(port),int(time.time()),results[0])
    else:
        sql = "INSERT INTO %sippool(ip,port,add_time) VALUES ('%s','%s','%d')" % (prefix,str(ip),str(port), int(time.time()))
    try:
        # 执行sql语句
        cursor.execute(sql)
        # 提交到数据库执行
        db.commit()
    except Exception:
        # 如果发生错误则回滚
        db.rollback()
    #关闭数据库

    db.close()


#删除失效ip
def del_ip(id):
    global prefix
    db = connect_db()
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()
    try:
        sql = "DELETE FROM %sippool WHERE id = '%d'" % (prefix,id)
        # 执行sql语句
        cursor.execute(sql)
        # 提交到数据库执行
        db.commit()
    except Exception:
        # 如果发生错误则回滚
        db.rollback()
    #关闭数据库

    db.close()


#更新任务搜索标识
def update_task_mark(id,mark,table,field):
    global prefix
    db = connect_db()
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()

    sql = "UPDATE  %s%s SET %s='%s' WHERE id = '%d'" %(prefix, str(table), str(field), str(mark), int(id))
    try:
        # 执行sql语句
        cursor.execute(sql)
        # 提交到数据库执行
        db.commit()
    except Exception:
        # 如果发生错误则回滚
        db.rollback()
    #关闭数据库
    db.close()


#更新任务排名
def update_task_rank(id,ranking,table,field):
    global prefix
    db = connect_db()
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()

    sql = "UPDATE  %s%s SET %s='%d' WHERE id = '%d'"%(prefix,str(table),str(field),int(ranking),int(id))
    try:
        # 执行sql语句
        cursor.execute(sql)
        # 提交到数据库执行
        db.commit()
    except Exception:
        # 如果发生错误则回滚
        db.rollback()
    #关闭数据库
    db.close()



#写入ip
def insert_detail_ip(ip,massage,stu):
    global prefix
    db = connect_db()
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()

    sql = "INSERT INTO %sippool_detail(`ip`,`massage`,`time`,`stu`) VALUES ('%s','%s','%d','%d')" % (prefix,str(ip),str(massage), int(time.time()),int(stu))
    try:
        # 执行sql语句
        cursor.execute(sql)
        # 提交到数据库执行
        db.commit()
    except Exception:
        # 如果发生错误则回滚
        db.rollback()
    #关闭数据库

    db.close()


#更新竞争对手
def update_rival_detail(id,data):
    global prefix
    db = connect_db()
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()

    sql = "UPDATE  %srival SET detail='%s' WHERE id = '%d'"%(prefix,str(data),int(id))
    try:
        # 执行sql语句
        cursor.execute(sql)
        # 提交到数据库执行
        db.commit()
    except Exception:
        # 如果发生错误则回滚
        db.rollback()
    #关闭数据库
    db.close()


#更新网站seo信息
def update_wapinfo_detail(id,data):
    global prefix
    db = connect_db()
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()

    sql = "UPDATE  %swap_info SET detail='%s' WHERE id = '%d'"%(prefix,str(data),int(id))
    try:
        # 执行sql语句
        cursor.execute(sql)
        # 提交到数据库执行
        db.commit()
    except Exception:
        # 如果发生错误则回滚
        db.rollback()
    #关闭数据库
    db.close()



#更新挖词表
def update_key_word(id,data):
    global prefix
    db = connect_db()
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()

    sql = "UPDATE  %skey_word SET data='%s' WHERE id = '%d'"%(prefix,str(data),int(id))
    try:
        # 执行sql语句
        cursor.execute(sql)
        # 提交到数据库执行
        db.commit()
    except Exception:
        # 如果发生错误则回滚
        db.rollback()
    #关闭数据库
    db.close()

#更新关键词排名日志表
def update_keyword_deduction_log(id,ranking,lyc,member_price,agent_price,type):
    global prefix
    db = connect_db()
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()

    sql = "INSERT INTO %skeyword_deduction_log(`task_keyword_id`,`ranking`,`lyc`,`member_price`,`agent_price`,`time`,`type`) VALUES ('%d','%d','%s','%s','%s','%d','%d')" % (
    prefix, int(id), int(ranking),str(lyc),str(member_price),str(agent_price),int(time.time()),int(type))

    try:
        # 执行sql语句
        cursor.execute(sql)
        # 提交到数据库执行
        db.commit()
    except Exception:
        # 如果发生错误则回滚
        db.rollback()
    # 关闭数据库
    db.close()